﻿/////////////////////////////////////////////////////////////////////////////////
//
// InstantCube
// - Automatically generates Analysis Services cubes
// (C) Copyright Johan Åhlén 2009
// 
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
// See the GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see http://www.gnu.org/licenses/.
//
// More info on InstantCube website: http://instantcube.codeplex.com
//
/////////////////////////////////////////////////////////////////////////////////


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AdvantIQ.InstantCube.Model
{
    public enum FieldType
    {
        Attribute,
        Fact,
        SurrogateKey,
        ForeignKey,
        Other
    }

    public class FieldInfo
    {
        public string ID { get; set; }
        public string Type { get; set; }
        public string Options { get; set; }
        public FieldType FieldType { get; set; }

        public bool IsReadonly
        {
            get
            {
                return FieldType == FieldType.SurrogateKey;
            }
        }

        public FieldInfo(string ID, FieldType fieldType, Project project)
        {
            this.ID = ID;
            FieldType = fieldType;
            switch (fieldType)
            {
                case FieldType.SurrogateKey:
                    Type = project.DefaultTypes.SurrogateKey;
                    Options = "IDENTITY(1, 1) NOT NULL";
                    break;
                case FieldType.ForeignKey:
                    Type = project.DefaultTypes.SurrogateKey;
                    Options = "NOT NULL";
                    break;
                default:
                    Type = "";
                    Options = "";
                    break;
            }
        }

        public FieldInfo(string ID, FieldType fieldType, string type, string options)
        {
            this.ID = ID;
            FieldType = fieldType;
            Type = type;
            Options = options;
        }
    }
}
